package com.gthncz.locks;

/**
 * 一种改进的 TASLock.
 * 为了避免 getAndSet() 每次都需要写 memory,
 * 可以先 read cache, 查看 状态是否改变.
 * 这样可以减少占用总线和写内存.
 */
public class TTASLock extends TASLock {

    @Override
    public void lock() {
        while(true){
            while (state.get()); // 先测试, 潜伏期 ( tuking stage. )
            if (state.getAndSet(true) == false){
                // 尝试上锁, 突袭区 (pouncing)
                break;
            }
        }
    }

    @Override
    public void unlock() {
        super.unlock();
    }
}
